{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f65efcc6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "Model [1A]: Difference-in-Differences – Employment<br><table style=\"text-align:center\"><tr><td colspan=\"4\" style=\"border-bottom: 1px solid black\"></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td colspan=\"3\"><em>Dependent variable: Employment</em></td></tr><tr><td style=\"text-align:left\"></td><tr><td></td><td colspan=\"1\">2017 & 2019</td><td colspan=\"1\">2017 & 2020</td><td colspan=\"1\">2017 & 2022</td></tr><tr><td style=\"text-align:left\"></td><td>(1)</td><td>(2)</td><td>(3)</td></tr>\n",
       "<tr><td colspan=\"4\" style=\"border-bottom: 1px solid black\"></td></tr>\n",
       "\n",
       "<tr><td style=\"text-align:left\">Intercept</td><td>26746.22<sup>***</sup></td><td>26746.22<sup>***</sup></td><td>26746.22<sup>***</sup></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td>(5036.13)</td><td>(5036.13)</td><td>(5036.13)</td></tr>\n",
       "<tr><td style=\"text-align:left\">Post</td><td>532.32<sup></sup></td><td>1323.99<sup></sup></td><td>5904.65<sup></sup></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td>(7169.94)</td><td>(7311.47)</td><td>(7995.83)</td></tr>\n",
       "<tr><td style=\"text-align:left\">Treat</td><td>-11787.04<sup>**</sup></td><td>-11787.04<sup>**</sup></td><td>-11787.04<sup>**</sup></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td>(5354.22)</td><td>(5354.22)</td><td>(5354.22)</td></tr>\n",
       "<tr><td style=\"text-align:left\">Treat×Post</td><td>-1.50<sup></sup></td><td>-951.32<sup></sup></td><td>-3966.57<sup></sup></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td>(7634.60)</td><td>(7752.14)</td><td>(8443.39)</td></tr>\n",
       "\n",
       "<td colspan=\"4\" style=\"border-bottom: 1px solid black\"></td></tr>\n",
       "<tr><td style=\"text-align: left\">Observations</td><td>892</td><td>892</td><td>892</td></tr><tr><td style=\"text-align: left\">R<sup>2</sup></td><td>0.01</td><td>0.01</td><td>0.02</td></tr><tr><td style=\"text-align: left\">Adjusted R<sup>2</sup></td><td>0.01</td><td>0.01</td><td>0.01</td></tr><tr><td style=\"text-align: left\">Residual Std. Error</td><td>51028.94 (df=888)</td><td>51674.09 (df=888)</td><td>56134.61 (df=888)</td></tr><tr><td style=\"text-align: left\">F Statistic</td><td>3.20<sup>**</sup> (df=3; 888)</td><td>3.34<sup>**</sup> (df=3; 888)</td><td>3.77<sup>**</sup> (df=3; 888)</td></tr>\n",
       "<tr><td colspan=\"4\" style=\"border-bottom: 1px solid black\"></td></tr><tr><td style=\"text-align: left\">Note:</td><td colspan=\"3\" style=\"text-align: right\"><sup>*</sup>p&lt;0.1; <sup>**</sup>p&lt;0.05; <sup>***</sup>p&lt;0.01</td></tr></table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "=== Model 2017 & 2019 ===\n",
      "                            OLS Regression Results                            \n",
      "==============================================================================\n",
      "Dep. Variable:             Employment   R-squared:                       0.013\n",
      "Model:                            OLS   Adj. R-squared:                  0.010\n",
      "Method:                 Least Squares   F-statistic:                     3.199\n",
      "Date:                Sat, 14 Jun 2025   Prob (F-statistic):             0.0228\n",
      "Time:                        17:41:57   Log-Likelihood:                -10933.\n",
      "No. Observations:                 892   AIC:                         2.187e+04\n",
      "Df Residuals:                     888   BIC:                         2.189e+04\n",
      "Df Model:                           3                                         \n",
      "Covariance Type:                  HC1                                         \n",
      "==============================================================================\n",
      "                 coef    std err          z      P>|z|      [0.025      0.975]\n",
      "------------------------------------------------------------------------------\n",
      "Intercept   2.675e+04   5036.125      5.311      0.000    1.69e+04    3.66e+04\n",
      "Treat      -1.179e+04   5354.224     -2.201      0.028   -2.23e+04   -1292.950\n",
      "Post         532.3194   7169.938      0.074      0.941   -1.35e+04    1.46e+04\n",
      "Treat:Post    -1.4958   7634.596     -0.000      1.000    -1.5e+04     1.5e+04\n",
      "==============================================================================\n",
      "Omnibus:                     1111.765   Durbin-Watson:                   0.791\n",
      "Prob(Omnibus):                  0.000   Jarque-Bera (JB):           109478.576\n",
      "Skew:                           6.508   Prob(JB):                         0.00\n",
      "Kurtosis:                      55.689   Cond. No.                         7.39\n",
      "==============================================================================\n",
      "\n",
      "Notes:\n",
      "[1] Standard Errors are heteroscedasticity robust (HC1)\n",
      "\n",
      "\n",
      "=== Model 2017 & 2020 ===\n",
      "                            OLS Regression Results                            \n",
      "==============================================================================\n",
      "Dep. Variable:             Employment   R-squared:                       0.014\n",
      "Model:                            OLS   Adj. R-squared:                  0.010\n",
      "Method:                 Least Squares   F-statistic:                     3.344\n",
      "Date:                Sat, 14 Jun 2025   Prob (F-statistic):             0.0187\n",
      "Time:                        17:41:57   Log-Likelihood:                -10944.\n",
      "No. Observations:                 892   AIC:                         2.190e+04\n",
      "Df Residuals:                     888   BIC:                         2.192e+04\n",
      "Df Model:                           3                                         \n",
      "Covariance Type:                  HC1                                         \n",
      "==============================================================================\n",
      "                 coef    std err          z      P>|z|      [0.025      0.975]\n",
      "------------------------------------------------------------------------------\n",
      "Intercept   2.675e+04   5036.125      5.311      0.000    1.69e+04    3.66e+04\n",
      "Treat      -1.179e+04   5354.224     -2.201      0.028   -2.23e+04   -1292.950\n",
      "Post        1323.9895   7311.472      0.181      0.856    -1.3e+04    1.57e+04\n",
      "Treat:Post  -951.3189   7752.142     -0.123      0.902   -1.61e+04    1.42e+04\n",
      "==============================================================================\n",
      "Omnibus:                     1130.884   Durbin-Watson:                   0.795\n",
      "Prob(Omnibus):                  0.000   Jarque-Bera (JB):           121685.745\n",
      "Skew:                           6.675   Prob(JB):                         0.00\n",
      "Kurtosis:                      58.640   Cond. No.                         7.39\n",
      "==============================================================================\n",
      "\n",
      "Notes:\n",
      "[1] Standard Errors are heteroscedasticity robust (HC1)\n",
      "\n",
      "\n",
      "=== Model 2017 & 2022 ===\n",
      "                            OLS Regression Results                            \n",
      "==============================================================================\n",
      "Dep. Variable:             Employment   R-squared:                       0.016\n",
      "Model:                            OLS   Adj. R-squared:                  0.013\n",
      "Method:                 Least Squares   F-statistic:                     3.774\n",
      "Date:                Sat, 14 Jun 2025   Prob (F-statistic):             0.0104\n",
      "Time:                        17:41:57   Log-Likelihood:                -11018.\n",
      "No. Observations:                 892   AIC:                         2.204e+04\n",
      "Df Residuals:                     888   BIC:                         2.206e+04\n",
      "Df Model:                           3                                         \n",
      "Covariance Type:                  HC1                                         \n",
      "==============================================================================\n",
      "                 coef    std err          z      P>|z|      [0.025      0.975]\n",
      "------------------------------------------------------------------------------\n",
      "Intercept   2.675e+04   5036.125      5.311      0.000    1.69e+04    3.66e+04\n",
      "Treat      -1.179e+04   5354.224     -2.201      0.028   -2.23e+04   -1292.950\n",
      "Post        5904.6545   7995.830      0.738      0.460   -9766.884    2.16e+04\n",
      "Treat:Post -3966.5682   8443.392     -0.470      0.639   -2.05e+04    1.26e+04\n",
      "==============================================================================\n",
      "Omnibus:                     1194.828   Durbin-Watson:                   0.839\n",
      "Prob(Omnibus):                  0.000   Jarque-Bera (JB):           181301.714\n",
      "Skew:                           7.233   Prob(JB):                         0.00\n",
      "Kurtosis:                      71.329   Cond. No.                         7.39\n",
      "==============================================================================\n",
      "\n",
      "Notes:\n",
      "[1] Standard Errors are heteroscedasticity robust (HC1)\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# MODEL [1A]\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import statsmodels.formula.api as smf\n",
    "from stargazer.stargazer import Stargazer\n",
    "from IPython.display import display, HTML\n",
    "\n",
    "# 1) File path and mapping: worksheet name → post-treatment year\n",
    "file_path = 'Data Model 1A and 1B.xlsx'\n",
    "sheets_and_post_years = {\n",
    "    '2017 e 2019': 2019,\n",
    "    '2017 e 2020': 2020,\n",
    "    '2017 e 2022': 2022\n",
    "}\n",
    "\n",
    "# 2) Fit the Difference-in-Differences Models (Model 1A)\n",
    "models_1A = []\n",
    "names_1A  = []\n",
    "\n",
    "for sheet, post_year in sheets_and_post_years.items():\n",
    "    df = pd.read_excel(file_path, sheet_name=sheet)\n",
    "    df.rename(columns={'Emprego': 'Employment'}, inplace=True)\n",
    "    \n",
    "    # Filter for only 2017 and the selected post-treatment year\n",
    "    df = df[df['Ano'].isin([2017, post_year])].copy()\n",
    "    \n",
    "    # Treatment and Post indicators\n",
    "    df['Treat'] = np.where(df['Situacao'] == 'Reonerado', 1, 0)\n",
    "    df['Post']  = np.where(df['Ano'] == post_year, 1, 0)\n",
    "    \n",
    "    # Model 1A: Employment ~ Treat * Post with robust standard errors (HC1)\n",
    "    model = smf.ols('Employment ~ Treat * Post', data=df).fit(cov_type='HC1')\n",
    "    \n",
    "    models_1A.append(model)\n",
    "    names_1A.append(f'2017 & {post_year}')\n",
    "\n",
    "# 3) Generate Stargazer-style summary table in HTML\n",
    "stargazer1A = Stargazer(models_1A)\n",
    "stargazer1A.title(\"Model [1A]: Difference-in-Differences – Employment\")\n",
    "stargazer1A.custom_columns(names_1A, [1]*len(models_1A))\n",
    "stargazer1A.significant_digits(2)\n",
    "\n",
    "stargazer1A.rename_covariates({\n",
    "    'Treat': 'Treat',\n",
    "    'Post': 'Post',\n",
    "    'Treat:Post': 'Treat×Post'\n",
    "})\n",
    "\n",
    "# 4) Display the table in a Jupyter notebook\n",
    "display(HTML(stargazer1A.render_html()))\n",
    "\n",
    "# 5) Save the summary table as HTML\n",
    "with open('1A_did_reonerado_vs_mantida.html', 'w', encoding='utf-8') as f:\n",
    "    f.write(stargazer1A.render_html())\n",
    "\n",
    "# 6) Print the summary for each model\n",
    "for name, model in zip(names_1A, models_1A):\n",
    "    print(f\"=== Model {name} ===\")\n",
    "    print(model.summary())\n",
    "    print(\"\\n\")\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "375acff6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "Model [1B]: Difference-in-Differences – log(Employment)<br><table style=\"text-align:center\"><tr><td colspan=\"4\" style=\"border-bottom: 1px solid black\"></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td colspan=\"3\"><em>Dependent variable: Log_Employment</em></td></tr><tr><td style=\"text-align:left\"></td><tr><td></td><td colspan=\"1\">2017 & 2019</td><td colspan=\"1\">2017 & 2020</td><td colspan=\"1\">2017 & 2022</td></tr><tr><td style=\"text-align:left\"></td><td>(1)</td><td>(2)</td><td>(3)</td></tr>\n",
       "<tr><td colspan=\"4\" style=\"border-bottom: 1px solid black\"></td></tr>\n",
       "\n",
       "<tr><td style=\"text-align:left\">Intercept</td><td>8.43<sup>***</sup></td><td>8.43<sup>***</sup></td><td>8.43<sup>***</sup></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td>(0.17)</td><td>(0.17)</td><td>(0.17)</td></tr>\n",
       "<tr><td style=\"text-align:left\">Post</td><td>-0.01<sup></sup></td><td>0.02<sup></sup></td><td>0.16<sup></sup></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td>(0.24)</td><td>(0.24)</td><td>(0.24)</td></tr>\n",
       "<tr><td style=\"text-align:left\">Treat</td><td>-0.11<sup></sup></td><td>-0.11<sup></sup></td><td>-0.11<sup></sup></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td>(0.21)</td><td>(0.21)</td><td>(0.21)</td></tr>\n",
       "<tr><td style=\"text-align:left\">Treat×Post</td><td>-0.03<sup></sup></td><td>-0.03<sup></sup></td><td>-0.07<sup></sup></td></tr>\n",
       "<tr><td style=\"text-align:left\"></td><td>(0.31)</td><td>(0.30)</td><td>(0.31)</td></tr>\n",
       "\n",
       "<td colspan=\"4\" style=\"border-bottom: 1px solid black\"></td></tr>\n",
       "<tr><td style=\"text-align: left\">Observations</td><td>886</td><td>885</td><td>886</td></tr><tr><td style=\"text-align: left\">R<sup>2</sup></td><td>0.00</td><td>0.00</td><td>0.00</td></tr><tr><td style=\"text-align: left\">Adjusted R<sup>2</sup></td><td>-0.00</td><td>-0.00</td><td>-0.00</td></tr><tr><td style=\"text-align: left\">Residual Std. Error</td><td>2.22 (df=882)</td><td>2.20 (df=881)</td><td>2.21 (df=882)</td></tr><tr><td style=\"text-align: left\">F Statistic</td><td>0.24<sup></sup> (df=3; 882)</td><td>0.22<sup></sup> (df=3; 881)</td><td>0.51<sup></sup> (df=3; 882)</td></tr>\n",
       "<tr><td colspan=\"4\" style=\"border-bottom: 1px solid black\"></td></tr><tr><td style=\"text-align: left\">Note:</td><td colspan=\"3\" style=\"text-align: right\"><sup>*</sup>p&lt;0.1; <sup>**</sup>p&lt;0.05; <sup>***</sup>p&lt;0.01</td></tr></table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "=== Model 1B (2017 & 2019) ===\n",
      "                            OLS Regression Results                            \n",
      "==============================================================================\n",
      "Dep. Variable:         Log_Employment   R-squared:                       0.001\n",
      "Model:                            OLS   Adj. R-squared:                 -0.003\n",
      "Method:                 Least Squares   F-statistic:                    0.2363\n",
      "Date:                Sat, 14 Jun 2025   Prob (F-statistic):              0.871\n",
      "Time:                        17:42:13   Log-Likelihood:                -1960.5\n",
      "No. Observations:                 886   AIC:                             3929.\n",
      "Df Residuals:                     882   BIC:                             3948.\n",
      "Df Model:                           3                                         \n",
      "Covariance Type:                  HC1                                         \n",
      "==============================================================================\n",
      "                 coef    std err          z      P>|z|      [0.025      0.975]\n",
      "------------------------------------------------------------------------------\n",
      "Intercept      8.4330      0.169     49.885      0.000       8.102       8.764\n",
      "Treat         -0.1082      0.212     -0.510      0.610      -0.524       0.307\n",
      "Post          -0.0149      0.241     -0.062      0.951      -0.488       0.458\n",
      "Treat:Post    -0.0314      0.306     -0.103      0.918      -0.630       0.568\n",
      "==============================================================================\n",
      "Omnibus:                      128.706   Durbin-Watson:                   0.693\n",
      "Prob(Omnibus):                  0.000   Jarque-Bera (JB):              195.981\n",
      "Skew:                          -0.986   Prob(JB):                     2.77e-43\n",
      "Kurtosis:                       4.192   Cond. No.                         7.37\n",
      "==============================================================================\n",
      "\n",
      "Notes:\n",
      "[1] Standard Errors are heteroscedasticity robust (HC1)\n",
      "\n",
      "\n",
      "=== Model 1B (2017 & 2020) ===\n",
      "                            OLS Regression Results                            \n",
      "==============================================================================\n",
      "Dep. Variable:         Log_Employment   R-squared:                       0.001\n",
      "Model:                            OLS   Adj. R-squared:                 -0.003\n",
      "Method:                 Least Squares   F-statistic:                    0.2221\n",
      "Date:                Sat, 14 Jun 2025   Prob (F-statistic):              0.881\n",
      "Time:                        17:42:13   Log-Likelihood:                -1949.9\n",
      "No. Observations:                 885   AIC:                             3908.\n",
      "Df Residuals:                     881   BIC:                             3927.\n",
      "Df Model:                           3                                         \n",
      "Covariance Type:                  HC1                                         \n",
      "==============================================================================\n",
      "                 coef    std err          z      P>|z|      [0.025      0.975]\n",
      "------------------------------------------------------------------------------\n",
      "Intercept      8.4330      0.169     49.885      0.000       8.102       8.764\n",
      "Treat         -0.1082      0.212     -0.510      0.610      -0.524       0.307\n",
      "Post           0.0197      0.240      0.082      0.935      -0.451       0.490\n",
      "Treat:Post    -0.0297      0.303     -0.098      0.922      -0.624       0.564\n",
      "==============================================================================\n",
      "Omnibus:                      119.759   Durbin-Watson:                   0.700\n",
      "Prob(Omnibus):                  0.000   Jarque-Bera (JB):              175.440\n",
      "Skew:                          -0.951   Prob(JB):                     8.01e-39\n",
      "Kurtosis:                       4.067   Cond. No.                         7.36\n",
      "==============================================================================\n",
      "\n",
      "Notes:\n",
      "[1] Standard Errors are heteroscedasticity robust (HC1)\n",
      "\n",
      "\n",
      "=== Model 1B (2017 & 2022) ===\n",
      "                            OLS Regression Results                            \n",
      "==============================================================================\n",
      "Dep. Variable:         Log_Employment   R-squared:                       0.002\n",
      "Model:                            OLS   Adj. R-squared:                 -0.002\n",
      "Method:                 Least Squares   F-statistic:                    0.5122\n",
      "Date:                Sat, 14 Jun 2025   Prob (F-statistic):              0.674\n",
      "Time:                        17:42:13   Log-Likelihood:                -1957.3\n",
      "No. Observations:                 886   AIC:                             3923.\n",
      "Df Residuals:                     882   BIC:                             3942.\n",
      "Df Model:                           3                                         \n",
      "Covariance Type:                  HC1                                         \n",
      "==============================================================================\n",
      "                 coef    std err          z      P>|z|      [0.025      0.975]\n",
      "------------------------------------------------------------------------------\n",
      "Intercept      8.4330      0.169     49.885      0.000       8.102       8.764\n",
      "Treat         -0.1082      0.212     -0.510      0.610      -0.524       0.307\n",
      "Post           0.1600      0.243      0.658      0.511      -0.317       0.637\n",
      "Treat:Post    -0.0661      0.305     -0.216      0.829      -0.665       0.533\n",
      "==============================================================================\n",
      "Omnibus:                      129.032   Durbin-Watson:                   0.704\n",
      "Prob(Omnibus):                  0.000   Jarque-Bera (JB):              196.573\n",
      "Skew:                          -0.988   Prob(JB):                     2.06e-43\n",
      "Kurtosis:                       4.192   Cond. No.                         7.37\n",
      "==============================================================================\n",
      "\n",
      "Notes:\n",
      "[1] Standard Errors are heteroscedasticity robust (HC1)\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# MODEL [1B]\n",
    "\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import statsmodels.formula.api as smf\n",
    "from stargazer.stargazer import Stargazer\n",
    "from IPython.display import display, HTML\n",
    "\n",
    "# 1) Set file path and worksheet → post-treatment year mapping\n",
    "file_path = 'Data Model 1A and 1B.xlsx'\n",
    "sheets_post_years = {\n",
    "    '2017 e 2019': 2019,\n",
    "    '2017 e 2020': 2020,\n",
    "    '2017 e 2022': 2022\n",
    "}\n",
    "\n",
    "# 2) Fit Model 1B (log of Employment)\n",
    "models_1B = []\n",
    "names_1B  = []\n",
    "\n",
    "for sheet, post_year in sheets_post_years.items():\n",
    "    # Load only years 2017 and the selected post-treatment year\n",
    "    df = pd.read_excel(file_path, sheet_name=sheet)\n",
    "    df.rename(columns={'Emprego': 'Employment'}, inplace=True)\n",
    "    df = df[df['Ano'].isin([2017, post_year])].copy()\n",
    "    \n",
    "    # Remove zeroes to avoid log(0)\n",
    "    df = df[df['Employment'] > 0]\n",
    "    \n",
    "    # Dummies: Treat = 1 if \"Reonerado\", 0 otherwise\n",
    "    df['Treat'] = np.where(df['Situacao'] == 'Reonerado', 1, 0)\n",
    "    df['Post']  = np.where(df['Ano'] == post_year, 1, 0)\n",
    "    \n",
    "    # Log of the dependent variable\n",
    "    df['Log_Employment'] = np.log(df['Employment'])\n",
    "    \n",
    "    # Run DID regression with robust standard errors (HC1)\n",
    "    model = smf.ols('Log_Employment ~ Treat * Post', data=df).fit(cov_type='HC1')\n",
    "    models_1B.append(model)\n",
    "    names_1B.append(f'2017 & {post_year}')\n",
    "\n",
    "# 3) Output consolidated Stargazer-style table\n",
    "stargazer1B = Stargazer(models_1B)\n",
    "stargazer1B.title(\"Model [1B]: Difference-in-Differences – log(Employment)\")\n",
    "stargazer1B.custom_columns(names_1B, [1]*len(models_1B))\n",
    "stargazer1B.significant_digits(2)\n",
    "\n",
    "stargazer1B.rename_covariates({\n",
    "    'Treat': 'Treat',\n",
    "    'Post': 'Post',\n",
    "    'Treat:Post': 'Treat×Post'\n",
    "})\n",
    "\n",
    "# 4) Display in the Jupyter notebook\n",
    "display(HTML(stargazer1B.render_html()))\n",
    "\n",
    "# 5) Save the summary table as HTML\n",
    "with open('1B_log_did_reonerado_vs_mantida.html', 'w', encoding='utf-8') as f:\n",
    "    f.write(stargazer1B.render_html())\n",
    "\n",
    "# 6) Print full summary for each Model 1B\n",
    "for name, model in zip(names_1B, models_1B):\n",
    "    print(f\"=== Model 1B ({name}) ===\")\n",
    "    print(model.summary())\n",
    "    print(\"\\n\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4ee67288",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
